/**
 * Copyright(c) 2013 Jade Techonologies Co., Ltd.
 *
 * History:
 *   14-7-28 上午11:58 Created by dwzhang
 */
package com.jade.framework.base.comm;

import java.net.InetSocketAddress;

/**
 * 协议传输器，与底层NIO框架相关，主要用于读写消息报文。
 *
 * @author dwzhang
 * @version 1.0 14-7-28 上午11:58
 */
public interface ProtocolTransport
{
    /**
     * 判断客户端是否处于连接活动状态。
     *
     * @return 客户端处于连接活动状态，返回true；否则返回false
     */
    public boolean isAlive();

    /**
     * 返回远程地址。
     *
     * @return 远程地址。
     */
    public InetSocketAddress getRemoteAddress();

    /**
     * 返回本地地址。
     *
     * @return 本地地址。
     */
    public InetSocketAddress getLocalAddress();

    /**
     * 发送消息，不要求响应。
     *
     * @param message 发送消息。
     * @throws CommException        通信处理错误
     */
    public void send(Object message)
            throws CommException;

    /**
     * 异步发送消息请求到服务段。
     *
     * @param request 消息请求。
     * @return 响应Future
     * @throws CommException        通信处理错误
     * @throws InterruptedException 消息处理中断
     */
    public ResponseFuture send(RequestMessage request)
            throws CommException, InterruptedException;

    /**
     * 同步发送消息请求到服务段。
     *
     * @param request 消息请求。
     * @return 消息响应
     * @throws CommException        通信处理错误
     * @throws InterruptedException 消息处理中断
     */
    public ResponseMessage sendAndGetResponse(RequestMessage request, int timeout)
            throws CommException, InterruptedException;

    /**
     * 收到响应消息。
     *
     * @param response 响应消息。
     */
    public void onResponse(ResponseMessage response);

    /** 关闭通信客户端。*/
    public void close();
}
